#include <iostream>
#include "ShareMemory.hpp"
//改装，利用命名管道对临界资源进行保护
#include"Time.hpp"
#include"Fifo.hpp"
int main()
{
    share.CreateShm();
    share.AttachShm();
    f.OpenPipeForRead();
    data*image=(data*)share.getaddr();
    while(true)
    {
        //等待 read
        int n=f.Wait();
        std::cout<<"status:"<<image->status<<std::endl;
        std::cout<<"lasttime:"<<image->lasttime<<std::endl;
        std::cout<<"image:"<<image->image<<std::endl;

        strcpy(image->status,"过期");
        if(n==0)
        break;

    }
    share.DetachShm();
    std::cout << "Detach success" << std::endl;
    share.DeleteShm();
    return 0;
}

//无保护版本
// int main()
// {
//     share.CreateShm();
//     std::cout << "shmget success" << std::endl;

//     share.AttachShm();
//     std::cout << "attach success" << std::endl;
//     char*addr=(char*)share.getaddr();
//     while(true)
//     {
//         std::cout<<addr<<std::endl;
//         sleep(1);
//     }
//     share.DetachShm();
//     std::cout << "Detach success" << std::endl;

//     share.DeleteShm();
//     return 0;
// }
// int main()
// {
//     //创建key,key可以理解为一把钥匙，这把钥匙专门属于projId，但是你现在还没有房子。
//     key_t k=::ftok(gfilename,gprojId);
//     if(k<0)
//     {
//         std::cerr<<"ftok error"<<std::endl;
//         return 1;
//     }
//     //创建共享内存，相当于创建了一个与key匹配的房子。
//     //共享内存也有权限！！！
//     int shmid=::shmget(k,gshmsize,IPC_CREAT|IPC_EXCL|gmode);
//     if(shmid<0)
//     {
//         std::cerr<<"shmget error"<<std::endl;
//         return 2;
//     }
//     //共享内存挂接到进程地址空间上，
//     void *ret=::shmat(shmid,nullptr,0);
//     std::cout<<"attach done"<<std::endl;
//     //删除共享内存
//     shmctl(shmid,IPC_RMID,nullptr);
//     std::cout<<"delete shm done"<<std::endl;
//     return 0;
// }